{\rtf1\ansi\ansicpg1252\deff0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fprq2\fcharset0 Cambria;}{\f1\fmodern\fprq1\fcharset0 Courier New;}{\f2\fnil\fcharset2 Symbol;}}
{\colortbl ;\red255\green0\blue0;\red0\green176\blue80;\red0\green0\blue255;}
{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li360\sa200\b\f0\fs22 Enterprise Architect\b0  v9.1 (Sparx Systems) - successfully generated a very detailed class diagram with relationships between boxes.  It has a basic design environment with connected lines like Visio.  The main "turnoff" is that all the class members are listed in each box so it gets overwhelming in a hurry.  \par
\cf1\b{\pntext\f2\'B7\tab}X\cf0  MagicDraw UML Enterprise\b0  v16.8 (No Magic Software) - \cf1 Parse errors\cf0  on the iTRAACv2 source code.  The partial class diagram that it did generate looked like Enterprise Architect with boxes connected via lines and all overwhelming list of members listed in each class box.\par
\cf1\b{\pntext\f2\'B7\tab}X\cf0  StarUML\b0  v5.0.2.1570 (Open source) - \cf1 Parse errors\cf0  on the iTRAACv2 source code.  \par
{\pntext\f2\'B7\tab}9Rays \b Spices.net \b0 v5.8.2.3 - Supposed to generate something called a "Code Flow Diagram" but unfortunately that doesn't seem to be enabled in the trial version.\par
\b{\pntext\f2\'B7\tab}Understand\b0  v2.6.581 (SciTech) - The UML Class Diagram Graph was promising... it would readily minimize down to class name boxes with no member info and the relationship lines were nice and curvy... you could readily filter down to just public properties and it could export to Visio... but unfortunatley the resulting Visio document was very "static"... i.e. the lines weren't attached to the boxes with dynamic connectors... they were just dead lines that wouldn't follow the class boxes for any reasonable editing in Visio, bummer.  This tool looks like it would be handy for browsing around in a big unknown project that got dumped on you... all kinds of code analysis.... lots of clickable dependency navigation and that sort of thing.\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li360\cf2\b\fs32 +\cf0\fs22 Visual Studio 2010\b0  (Ultimate) - Architecture > Generate Dependency Graph > By Namespace... generates a DGML format which is displayed in Visual Studio as a visually appealing class diagram.   "By Namespace" was particularly handy because it would then generate a big iTRAACv2 namespace box that could easily be drilled into and focused on.  You can delete trivial classes and readily simplify the diagram.  You CAN NOT move class boxes around to format in a logical fashion... what a WEIRD limitation for anotherwise awesome tool... it presents everything with nice glossy colors so that your diagram is appealing right away... you can save the DGML as an XPS and then convert that into PDF by dropping into Acrobat Pro.\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li720\sa200 The other Visio/Visual Studio class diagrams really didn't give me anything useful to work with... e.g. Project > Viso UML loads all your classes into a Visio project, but it's still up to you to manually add them to a diagram... at least it connects the boxes with references but the inital empty page is a big turnoff for me.  The VS Class Diagram tool is capable but also very manual... i'm looking for something that automatically generates that i can then edit down to something i like.  Lastly there is a "Modeling" project type where you can add a UML Class Diagram which is basically the same manual scenario.\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li360\cf2\b\fs32 +\cf0\fs22  Doxygen \b0 v1.7.5.1 \i plus\i0  \b GraphViz \b0 v2.29 \i plus\i0  \b MS HTML Workshop\b0  v4.74.8702.0 (all free) - Doxygen generated very nice looking html based class/member reference document.  Including table of contents, a nice simple graphic Class Diagram and everything is hyperlinked.  It also creates the appropriate files to readily generate a cool .CHM via \i MS HTML Help Workshop\i0  compiler.\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li720 For great looking Class Hierarchy diagrams embedded in all the help, make sure to enable the usage of GraphViz "dot" and specify the path to dot.exe.\par
{\pntext\f2\'B7\tab}Doxygen: {\field{\*\fldinst{HYPERLINK "http://www.stack.nl/~dimitri/doxygen/download.html#latestsrc"}}{\fldrslt{\ul\cf3 http://www.stack.nl/~dimitri/doxygen/download.html#latestsrc}}}\f0\fs22\par
{\pntext\f2\'B7\tab}GraphViz: {\field{\*\fldinst{HYPERLINK "http://www.graphviz.org/Download_windows.php"}}{\fldrslt{\ul\cf3 http://www.graphviz.org/Download_windows.php}}}\f0\fs22\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li720\sa200\sl240\slmult1 MS HTML Workshop:\b  \b0{\field{\*\fldinst{HYPERLINK "http://www.microsoft.com/download/en/details.aspx?id=21138"}}{\fldrslt{\ul\cf3 http://www.microsoft.com/download/en/details.aspx?id=21138}}}\f0\fs22\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li360\b VGCRoot.dll\b0  - Generate a Visual \ul Runtime\ulnone  Object Model\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-360\li720 How-to Video: {\field{\*\fldinst{HYPERLINK "http://msdn.microsoft.com/en-us/vstudio/Video/gg145460"}}{\fldrslt{\ul\cf3 http://msdn.microsoft.com/en-us/vstudio/Video/gg145460}}}\f0\fs22\par
{\pntext\f2\'B7\tab}The "bitness" of everything seems to matter so make sure you're running *EVERYTHING* consistently in the same 32/64 bitness.\par
{\pntext\f2\'B7\tab}Make sure compile your debug exe with Project > Properties > Build > Platform target = Any CPU, or x64\par
{\pntext\f2\'B7\tab}Also turn ON Project > Properties > Debug > Enable Debuggers > Enable unmanaged code debugging.\par
{\pntext\f2\'B7\tab}Obtain WinDBG from the Windows SDK: {\field{\*\fldinst{HYPERLINK "http://msdn.microsoft.com/en-us/windows/hardware/gg463009"}}{\fldrslt{\ul\cf3 http://msdn.microsoft.com/en-us/windows/hardware/gg463009}}}\f0\fs22  (the "redistributables" are the easiest way to get just WinDbg.exe installed)\par
{\pntext\f2\'B7\tab}Obtain VGCRoot.dll and put it in "C:\\Program Files\\Debugging Tools for Windows (x64)\\winext" : {\field{\*\fldinst{HYPERLINK "http://blogs.msdn.com/b/mohamedg/archive/2010/03/02/visual-gcroot-via-dgml.aspx"}}{\fldrslt{\ul\cf3 http://blogs.msdn.com/b/mohamedg/archive/2010/03/02/visual-gcroot-via-dgml.aspx}}}\f0\fs22\par
{\pntext\f2\'B7\tab}Open Visual Studio\ul  64bit\ulnone  Command Prompt: \f1 CALL "C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\Bin\\SetEnv.cmd" /x64\par
\f0{\pntext\f2\'B7\tab}Launch WinDBG.exe from Visual Studio Command Prompt: "\f1 C:\\Program Files\\Debugging Tools for Windows (x64)\\windbg.exe\f0 "\par
{\pntext\f2\'B7\tab}WinDBG > File > Open Executable > load your app's debug exe: D:\\Dev\\US_Army\\iTRAACv2\\App\\bin\\Debug\\iTRAACv2.exe \par
\f1{\pntext\f2\'B7\tab}.load C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\clr.dll\f0\par
\f1{\pntext\f2\'B7\tab}.load C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\sos.dll\f0\par
\f1{\pntext\f2\'B7\tab}.load C:\\Program Files\\Debugging Tools for Windows (x64)\\winext\\vgcroot.dll\f0\par
\f1{\pntext\f2\'B7\tab}.chain \f0 (to show that dll's are indeed loaded)\par
\f1{\pntext\f2\'B7\tab}g or F5\f0  (to start your EXE and create a running context, otherwise DLLs won't actually be loaded into memory and dumpheap will fail with clr.dll error)\par
{\pntext\f2\'B7\tab}Kick around your app a bit to instantiate some some juicy objects.\par
\f1{\pntext\f2\'B7\tab}CTRL\f0 -\f1 BREAK\f0\par
\f1{\pntext\f2\'B7\tab}!dumpheap -type TabItem\f0  (<= subtitute a class name that you're interested in )\par
\f1{\pntext\f2\'B7\tab}!vgcroot /fields 2d2d4e8 \f0 (<= replace this address with something promising from the !dumpheap output\'85 this will generate \ldblquote temp.dgml\rdblquote  to WinDbg\rquote s working directory \endash  View > WinDbg Command Line)\f1\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\fi-360\li720\sa200\f0 Lastly, open temp.dgml in Visual Studio... to be frank, the output is so granular that it's not really oriented towards documentation but rather more useful for hunting down memory leaks.\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li360 Sacha Barber's \b AutoDiagrammer\b0  v2 - Class \ul Relationships\ulnone  Diagrammer (via property and method references, not an inheritance Class Diagram)\par
\pard{\pntext\f2\'B7\tab}{\*\pn\pnlvlblt\pnf2\pnindent0{\pntxtb\'B7}}\nowidctlpar\fi-360\li720{\field{\*\fldinst{HYPERLINK "http://www.codeproject.com/KB/WPF/AutoDiagrammerII.aspx?fid=1631625&fr=111#xx0xx"}}{\fldrslt{\ul\cf3 http://www.codeproject.com/KB/WPF/AutoDiagrammerII.aspx?fid=1631625&fr=111#xx0xx}}}\f0\fs22\par
{\pntext\f2\'B7\tab}This is still a static diagramming tool that works by reflecting... so we're not going to see the full picture of \ul runtime\ulnone  interaction that GCRoot based tools do but it is also a less busy diagram to start from.\par
{\pntext\f2\'B7\tab}You can move the class boxes around to create a logical layout.\par
}
 